#define _GNU_SOURCE
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>

// gettid函数并不是标准C库或POSIX线程库（pthreads）直接提供的函数，而是Linux内核中的一个系统调用。
// 由于它没有在像glibc这样的标准C库中声明，所以在用户空间代码中直接使用gettid时，编译器会报未定义的错误。

// first线程函数
void *first_thread_func(void *arg)
{
    printf("first thread(%d)\n", gettid());
}

// second线程函数
void *second_thread_func(void *arg)
{
    printf("second thread(%d)\n", gettid());
}

int main(int argc, char const *argv[])
{
    printf("main thread(%d) start\n", gettid());

    // 创建2个分线程
    pthread_t pt1, pt2;
    // pthread_create函数用于创建一个新线程，并返回一个指向新线程的句柄。
    pthread_create(&pt1,              // 线程句柄
                   NULL,              // 线程属性
                   first_thread_func, // 线程函数
                   NULL               // 线程函数参数
    );
    pthread_create(&pt2, NULL, second_thread_func, NULL);

    // 等待分线程执行完毕
    pthread_join(pt1, NULL);
    pthread_join(pt2, NULL);

    printf("main thread(%d) end \n", gettid());
    return 0;
}